package cn.kmsoft.common;

/**
 * 返回结果的通用性规范枚举
 *
 */
public enum ResultEnum implements IResult{
    /**
     * 1xx	信息，表示临时响应并需要请求者继续执行操作
     * 2xx	成功，操作被成功接收并处理
     * 3xx	表示要完成请求，需要进一步操作。 通常，这些状态代码用来重定向
     * 4xx	客户端错误，请求包含语法错误或无法完成请求
     * 5xx	这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误，而不是请求出错
     * ————————————————
     */
    SUCCESS( "success",200,"接口调用成功"),//接口调用成功

    FORBIDDEN("failed",401, "没有权限访问资源"),//没有权限访问资源
    REJECT("failed",403, "服务器拒绝请求"),//服务器拒绝请求
    TARGET_NOTFOUND("failed",404, "目标资源不存在"),//目标资源不存在

    COMMON_FAILED("failed",500, "服务内部错误，无法完成请求处理"),//服务内部错误
    VALIDATE_FAILED("failed",501, "参数校验失败"),//参数校验失败

    //自定义部分
    TIMEOUT("failed",600, "后端执行超时"),//后端执行超时或者长时间未响应
    DB_ERROR("failed",602, "数据库或连接异常");//数据库或连接异常

    private Integer code;
    private String message;
    private String status;//包含两个状态：success与failed，code是该状态下的细节代码

    /**
     * 默认的返回结果枚举
     *
     * @param status  状态标识，粒度更粗：success 表示成功；failed表示失败；
     * @param code  状态码：200表示成功、500表示内部执行异常；
     * @param msg  消息体
     */
    ResultEnum(String status, int code, String msg) {
        this.status=status;
        this.code=code;
        this.message=msg;
    }



    @Override
    public Integer getCode() {
        return code;
    }

    @Override
    public String getMessage() {
        return message;
    }

    @Override
    public String getStatus(){
        return status;
    }

}
